/*
 * VentasKeyboardListener.java
 *
 * Created on 24 de enero de 2007, 11:14 AM
 *
 
 */

package inc.jmc.cyberboard.ui.ventas.common;
import inc.jmc.cyberboard.log.Log;
import java.awt.Rectangle;
import java.util.Vector;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.DefaultTableModel;
import org.apache.log4j.Logger;
/**
 * Este es el EventListener, que recupera un caracter del teclado para hacer la busqueda y seleccion de un objeto en la tabla de productos.
 * @author Juan Miguel Olguin Salguero
 */
public class VentasKeyboardListener extends java.awt.event.KeyAdapter {
    
    
    static Logger logger = Logger.getLogger(VentasKeyboardListener.class.getName());
    /**
     * Es una referencia a la tabla a la cual se le agrega este listener.
     */
    private JTable productosTable;
    /**
     * Es una referencia a un Defaulttablemodel de la tabla a la cual se le agrega este listener.
     */
    private ItemProdsTableAccessorMap itemsMap = new ItemProdsTableAccessorMap();
    /**
     * Es el modelo de seleccion de esta tabla.
     */
    ListSelectionModel selModel=null;
    
    /**
     * Es el constructor de esta clase, requiere de que pasemos el objeto Jtable, y su respectivmo modelo de datos
     * @param productosTable tabla de productos
     * @param dtm data model del JTable
     */
    public VentasKeyboardListener(JTable productosTable,DefaultTableModel dtm) {
        this.productosTable = productosTable;
        selModel = productosTable.getSelectionModel();
        
        Vector rows = dtm.getDataVector();
        int max=rows.size();
        for(int i=0;i<max;++i)
        {
            Vector row=(Vector)rows.get(i);
            String nombreCorto=(String)row.get(0);
            itemsMap.add(nombreCorto);
        
        }
    }
    /**
     * Evento derogado. <br>
     * Recupera el caracter que se presiono en el teclado.<br>
     * Usando el caracter como indice, se busca el id del elemento 
     * que corresponde a dicho caracter dentro de la tabla.<br>
     * @param evt Objeto evento en el que se guarda la informacion del evento del teclado
     */
    public void keyPressed(java.awt.event.KeyEvent evt) {
        
        char charNdx = evt.getKeyChar();
        charNdx = Character.toUpperCase(charNdx);
        //logger.info("se ha presionado la tecla--->" +charNdx);
        int indexToSelect=itemsMap.getIndex(charNdx);
        Rectangle rect=productosTable.getVisibleRect();
        //logger.info("La tabla mide--->"+productosTable.getWidth()+","+productosTable.getHeight());
        //logger.info("El rectangulo visible es--->"+rect.x+","+rect.y+","+rect.width+","+rect.height);
        if(indexToSelect>=0)
        {
            
            selModel.setSelectionInterval(indexToSelect,indexToSelect);
            int y1=productosTable.getRowHeight();
            Rectangle rectScroll=new Rectangle(0,y1*indexToSelect,rect.width,rect.height);
            //logger.info("El rectangulo de scroll es--->"+rectScroll.x+","+rectScroll.y+","+rectScroll.width+","+rectScroll.height);
            productosTable.scrollRectToVisible(rectScroll);
            
        
        }
            
    }
}
